package org.pz.base.class_demo;

import java.lang.reflect.Method;
import java.lang.reflect.TypeVariable;

public class ReflectDemo {

    public static void main(String[] args) {
        classDemo();
    }

    public static void classDemo(){

        //获取泛型
        TypeVariable<Class<Dog>>[] typeParameters = Dog.class.getTypeParameters();
        System.out.println(typeParameters.length);

        //获取父接口
        Class<?>[] interfaces = Dog.class.getInterfaces();
        System.out.println(interfaces.length);

        //获取所属类（内部类），A 是 B 的内部类，那么 A.getDeclaringClass() 就是 B
        Class<?> declaringClass = Dog.Food.class.getDeclaringClass();
        System.out.println(declaringClass);

        //获取方法所属类
        Method[] methods = Dog.Food.class.getMethods();
        for(Method method : methods){
            System.out.println(method.getName() + "-------------------");

            //获取方法修饰符 public final static 等所有修饰符的位标志
            System.out.println( method.getModifiers() );

            //获取方法所属类
            System.out.println( method.getDeclaringClass() );
        }

    }
}
